package com.clothing.customization.service;

import com.clothing.customization.entity.DesignerQualification;
import com.clothing.customization.entity.DesignerSchedule;
import org.springframework.data.domain.Page;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 设计师管理服务接口
 */
public interface DesignerManagementService {
    
    /**
     * 资质审核相关方法
     */
    
    /**
     * 分页获取设计师资质列表
     * @param params 查询参数
     * @return 资质列表
     */
    Page<DesignerQualification> getQualificationList(Map<String, Object> params);
    
    /**
     * 根据ID获取资质详情
     * @param id 资质ID
     * @return 资质详情
     */
    DesignerQualification getQualificationById(Long id);
    
    /**
     * 审核设计师资质
     * @param id 资质ID
     * @param status 审核状态：1-通过，2-拒绝
     * @param auditRemark 审核备注
     * @param auditorId 审核人ID
     * @return 是否成功
     */
    boolean auditQualification(Long id, Integer status, String auditRemark, Long auditorId);
    
    /**
     * 统计各状态资质数量
     * @return 统计结果
     */
    Map<Integer, Long> countQualificationByStatus();
    
    /**
     * 日程管理相关方法
     */
    
    /**
     * 分页获取设计师日程列表
     * @param params 查询参数
     * @return 日程列表
     */
    Page<DesignerSchedule> getScheduleList(Map<String, Object> params);
    
    /**
     * 根据ID获取日程详情
     * @param id 日程ID
     * @return 日程详情
     */
    DesignerSchedule getScheduleById(Long id);
    
    /**
     * 添加设计师日程
     * @param schedule 日程信息
     * @return 添加后的日程
     */
    DesignerSchedule addSchedule(DesignerSchedule schedule);
    
    /**
     * 更新设计师日程
     * @param schedule 日程信息
     * @return 更新后的日程
     */
    DesignerSchedule updateSchedule(DesignerSchedule schedule);
    
    /**
     * 删除设计师日程
     * @param id 日程ID
     * @return 是否成功
     */
    boolean deleteSchedule(Long id);
    
    /**
     * 检查日程时间是否冲突
     * @param designerId 设计师ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param excludeId 需排除的日程ID(修改日程时使用)
     * @return 是否存在冲突
     */
    boolean checkScheduleConflict(Long designerId, Date startTime, Date endTime, Long excludeId);
    
    /**
     * 根据时间范围获取设计师日程
     * @param designerId 设计师ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 日程列表
     */
    List<DesignerSchedule> getDesignerScheduleByTimeRange(Long designerId, Date startTime, Date endTime);
    
    /**
     * 统计各类型日程数量
     * @param designerId 设计师ID
     * @return 统计结果
     */
    Map<Integer, Long> countScheduleByType(Long designerId);
} 